/*
15. 全排列
给定一个数字列表，返回其所有可能的排列。

样例
给出一个列表[1,2,3]，其全排列为：

[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]
挑战
使用递归和非递归分别解决。

注意事项
你可以假设没有重复数字。
*/

/*
这题直接使用C++的next_permutation搞定
*/
class Solution {
public:
    /*
     * @param nums: A list of integers.
     * @return: A list of permutations.
     */
    vector<vector<int>> permute(vector<int> &nums) {
        // write your code here
        vector<vector<int>> result;
        sort(begin(nums), end(nums));
        do
        {
            result.emplace_back(nums);
        }while(next_permutation(begin(nums), end(nums)));
        
        return result;
    }
};